home *** CD-ROM | disk | FTP | other *** search
- #
- | public symbols
- .globl _begsig
- | external references
- .globl _vectab
- .globl _M
- #ifdef ACK
- .text
- .data
- .bss
- #endif ACK
-
- #ifdef ALCYON
- #define FREEREGS d0-d2/a0-a2
- #endif
- #ifdef ACK
- #define FREEREGS d0-d2/a0-a1
- #endif
- #ifdef __GNUC__
- #define FREEREGS d0-d1/a0-a1
- #endif
-
- mtype = 2 | M+mtype = &M.m_type
- .text
- .even
- _begsig:
- moveml FREEREGS,sp@-
- clrl d0
- #ifdef ALCYON
- movw sp@(24),d0 | d0 = signal number
- #endif
- #ifdef ACK
- movw sp@(20),d0 | d0 = signal number
- #endif
- #ifdef __GNUC__
- movw sp@(16),d0 | d0 = signal number
- #endif
- movw _M+mtype,sp@- | push status of last system call
- #ifdef __GNUC__
- #ifdef __MSHORT__
- movw d0,sp@- | func called with signal number as arg
- #else
- extl d0
- movl d0,sp@- | func called with signal number as arg
- #endif
- #else
- movw d0,sp@- | func called with signal number as arg
- #endif
- asll #2,d0 | pointers are four .bytes on 68000
- movl #_vectab,a0
- movl a0@(-4,d0:w),a0 | a0 = address of routine to call
- jsr a0@
- back:
- #ifdef __GNUC__
- #ifdef __MSHORT__
- addql #2,sp | get signal number off stack
- #else
- addql #4,sp | get signal number off stack
- #endif
- #else
- addl #2,sp | get signal number off stack
- #endif
- movw sp@+,_M+mtype | restore status of previous system call
- moveml sp@+,FREEREGS
- addl #2,sp | remove signal number from stack
- rtr
-